]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
St: recompute all theme nodes when the icon theme changes
authorGiovanni Campagna <gcampagna@src.gnome.org>
Fri, 30 Nov 2012 14:48:37 +0000 (15:48 +0100)
committerJasper St. Pierre <jstpierre@mecheye.net>
Thu, 6 Dec 2012 22:42:07 +0000 (17:42 -0500)
StWidget considers "same theme node" as an indication that the style
did not change, and skips emitting style-changed in that case. This
means that icon theme changes are not picked up by StIcon.

https://bugzilla.gnome.org/show_bug.cgi?id=689353

src/st/st-theme-context.c

index 5891cf79da90314499644d589bb03ed77e606dcf..399a858bd5b3fe96bcda57a42435e97e7d18e9bb 100644 (file)
@@ -143,13 +143,6 @@ on_stage_destroy (ClutterStage *stage)
   g_object_unref (context);
 }
 
-static gboolean
-emit_changed (StThemeContext *context)
-{
-  g_signal_emit (context, signals[CHANGED], 0);
-  return FALSE;
-}
-
 static void
 st_theme_context_changed (StThemeContext *context)
 {
@@ -157,12 +150,19 @@ st_theme_context_changed (StThemeContext *context)
   context->root_node = NULL;
   g_hash_table_remove_all (context->nodes);
 
-  emit_changed (context);
+  g_signal_emit (context, signals[CHANGED], 0);
 
   if (old_root)
     g_object_unref (old_root);
 }
 
+static gboolean
+changed_idle (gpointer userdata)
+{
+  st_theme_context_changed (userdata);
+  return FALSE;
+}
+
 static void
 on_icon_theme_changed (StTextureCache *cache,
                        StThemeContext *context)
@@ -170,9 +170,9 @@ on_icon_theme_changed (StTextureCache *cache,
   /* Note that an icon theme change isn't really a change of the StThemeContext;
    * the style information has changed. But since the style factors into the
    * icon_name => icon lookup, faking a theme context change is a good way
-   * to force users such as StIcon to look up icons again. Don't bother recreating
-   * the root node, though. */
-  g_idle_add ((GSourceFunc) emit_changed, context);
+   * to force users such as StIcon to look up icons again.
+   */
+  g_idle_add ((GSourceFunc) changed_idle, context);
 }
 
 /**